package com.hsnn.medstgmini.dao;

import java.util.List;
import java.util.Map;

import com.hsnn.medstgmini.util.Pagination;

/**
 * @category Hibernate 查询通用类
 * @author 
 * @date 2015-06-14
 */
public interface HibernateSqlUtil {
	/**
	 * 
	 *@category 通过实体对象新增一条数据
	 *@author 邱磊
	 *@date 2015年7月1日 下午9:10:56
	 *@param obj
	 *@return
	 */
	public boolean add(Object obj);
	/**
	 * 
	 *@category 通过实体对象删除数据
	 *@author 邱磊
	 *@date 2015年7月1日 下午9:11:22
	 *@param obj
	 *@return
	 */
	public boolean delete(Object obj);
	public boolean delete(String entyName,Object obj);
	/**
	 * 
	 *@category 根据对象新增一条记录
	 *@author 邱磊
	 *@date 2015年6月15日 上午11:26:03
	 *@param obj
	 *@return
	 */
	public boolean update(Object obj);
	/**
	 * 
	 *@category 通过实体对象与ID获取一条数据
	 *@author 邱磊
	 *@date 2015年7月1日 下午9:11:49
	 *@param obj
	 *@param id
	 *@return
	 */
	public Object getUniquerResult(Class<?> obj,String id);
	/**
	 * 
	 *@category 通过hql语句获取一条数据
	 *@author 邱磊
	 *@date 2015年7月1日 下午9:12:08
	 *@param sql
	 *@return
	 */
	public Object getUniqueResult(String sql);

	/*
	 * @category 通过SQL语句与ParamList从数据库中取出单条记录.
	 * @param session, hibernate session
	 * @param sql SQL语句
	 * @param param 输入参数，取代SQL中的？
	 * @author 
	 * @date 2015-06-14
	 */
	public Object getUniqueResult(String sql, List<String> param);

	/*
	 * @category 通过SQL语句从数据库中取出单条记录.
	 * @param session, hibernate session
	 * @param sql SQL语句
	 * @author 
	 * @date 2015-06-14
	 */
	public Object getFirstResult(String sql);

	/*
	 * @category 通过SQL语句与ParamList从数据库中取出单条记录.
	 * @param session, hibernate session
	 * @param sql SQL语句
	 * @param param 输入参数，取代SQL中的？
	 * @author 
	 * @date 2015-06-14
	 */
	public Object getFirstResult(String sql, List<String> param);

	/*
	 * @category 通过SQL语句从数据库中取出全部记录.
	 * @param session, hibernate session
	 * @param sql SQL语句
	 * @param param 输入参数，取代SQL中的？
	 * @author 
	 * @date 2015-06-14
	 */
	public List<?> getList( String sql, List<String> param);

	/*
	 * @category 通过SQL语句从数据库中取出全部记录.
	 * @param session, hibernate session
	 * @param sql SQL语句
	 * @param param 输入参数，取代SQL中的占位符
	 * @author 
	 * @date 2015-06-14
	 */
	public List<?> getList(String sql, Map<String, ?> params);
	
	/*
	 * @category 通过SQL语句从数据库中取出定长记录.
	 * @param session, hibernate session
	 * @param begIndex 第一条记录
	 * @param count 记录总条数
	 * @param sql SQL语句
	 * @author 
	 * @date 2015-06-14
	 */
	public List<?> getList(int begIndex, int count, String sql);

	/*
	 * @category 通过SQL与ParamList从数据库中取出定长记录.
	 * @param session, hibernate session
	 * @param sql SQL语句
	 * @param begIndex 第一条记录
	 * @param count 记录总条数
     * @param param 输入参数，取代SQL中的占位符
	 * @author 
	 * @date 2015-06-14
	 */
	public Pagination getPageList(String sql, Map<String, ?> params, Pagination page);

	/*
	 * @category 通过SQL与ParamList从数据库中取出定长记录.
	 * @param session, hibernate session
	 * @param sql SQL语句
	 * @param begIndex 第一条记录
	 * @param count 记录总条数
     * @param param 输入参数，取代SQL中的"?"
	 * @author 
	 * @date 2015-06-14
	 */
	public Pagination getPageList(String sql, List<String> param, Pagination page);
	
/************************************************以下以原生SQL执行**********************************************************/
	/**
	 * 
	 *@category 获取list
	 *@author 邱磊
	 *@date 2015年7月1日 下午9:12:39
	 *@param sql
	 *@param param
	 *@return
	 */
	public List<?> getSqlList (String sql, List<String> param);
	public List<?> getSqlList(String sql, Map<String, ?> params);
	public Pagination getSqlPageList(String sql, Map<String, ?> params, Pagination page);
	public Pagination getSqlPageList(String sql, List<String> param, Pagination page);
	public Object getSqlUniqueResult(String sql,  Map<String, ?> params);
	
	/**
	 *@category 根据sql查询语句,【有分页】【有查询总条目数】
	 *@author 邱磊
	 *@date 2015年8月3日10:09:18
	 *@param sql
	 *@param params
	 *@return Pagination
	 */
	public Pagination getSqlPageMapList(String sql, Map<String, ?> params, Pagination page);
	
	/**
	 *@category 根据sql查询语句，返回List集合,【无分页】
	 *@author 邱磊
	 *@date 2015年8月3日10:07:11
	 *@param sql
	 *@param params
	 *@return
	 */
	public List<?> getSqlMapList(String sql, Map<String, ?> params);
	
	
	/**
	 *@category 根据sql查询语句，一个对象
	 *@author 应晓川
	 *@date 2015年8月7日14:21:35
	 *@param sql
	 *@param params
	 *@return
	 */
	public Object getSqlMapUniqueResult(String sql, Map<String, ?> params);
	
	/**
	 * 
	 *@category 执行sql语句
	 *@author 邱磊
	 *@date 2015年7月1日 下午9:10:24
	 *@param sql
	 *@param params
	 *@return
	 */
	public boolean executeSql(String sql,Map<String, ?> params);
	
	/**
	 * 
	 *@category 据条件原生SQL分页查询（返回的list中对象为map）
	 *@author 邱磊
	 *@date 2015年7月10日 上午10:34:37
	 *@param sql
	 *@param params
	 *@param page
	 *@return
	 */
	public Pagination getSqlPageMapList2(String sql, Map<String, ?> params, Pagination page);
	
	/**
	 * 
	 *@category 据条件原生SQL分页查询（返回的list中对象为map）
	 *@author 邱磊
	 *@date 2015年7月10日 上午10:34:37
	 *@param sql
	 *@param params
	 *@param page
	 *@return
	 */
	public Pagination getPageMapList(String sql, Map<String, ?> params, Pagination page);
	
	/**
	 * 
	 *@category 据条件原生SQL不分页查询（返回的list中对象为map）
	 *@author 韩守松
	 *@date 2015年12月3日 
	 *@param sql
	 *@param params
	 *@param page
	 *@return
	 */
	public Pagination getSqlNOPageMapList(String string,
			Map<String, ?> params, Pagination page);
	
	
	/**
	 * 
	 *@category 据条件原生SQL分页查询（返回的list中对象为map）
	 *@author 邱磊
	 *@date 2015年7月10日 上午10:34:37
	 *@param sql
	 *@param params
	 *@param page
	 *@return
	 */
	public Pagination getPageSelectMapList(String sql, Map<String, ?> params, Pagination page);
	
}